home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DDJMAG / DDJ9110.ZIP / STRING.ZIP / STRING.HPP < prev    next >
C/C++ Source or Header  |  1991-07-16  |  3KB  |  103 lines

  1. #ifndef __STRING_HPP
  2. #define __STRING_HPP
  3. #include <stddef.h>
  4. #include <string.h>
  5. #include <limits.h>
  6.  
  7. class istream;
  8. class ostream;
  9.  
  10. class srep {
  11. friend class String;
  12. friend String dup(const String&);
  13. private:
  14.     srep(int, const char * = 0);
  15.     void *operator new(size_t cs, size_t ss = 0);
  16.  
  17.     int refs;
  18.     int length;
  19.     char body[1];
  20. };
  21.  
  22. class String {
  23. friend int strlen(const String&);
  24.  
  25. friend String operator+(const String&, const String&);
  26. friend String operator+(const String&, const char *);
  27. friend String operator+(const char *, const String&);
  28. friend int operator==(const String&, const String&);
  29. friend int operator==(const String&, const char *);
  30. friend int operator==(const char *, const String&);
  31. friend int operator!=(const String&, const String&);
  32. friend int operator!=(const String&, const char *);
  33. friend int operator!=(const char *, const String&);
  34. friend int operator>(const String&, const String&);
  35. friend int operator>(const String&, const char *);
  36. friend int operator>(const char *, const String&);
  37. friend int operator<(const String&, const String&);
  38. friend int operator<(const String&, const char *);
  39. friend int operator<(const char *, const String&);
  40. friend int operator>=(const String&, const String&);
  41. friend int operator>=(const String&, const char *);
  42. friend int operator>=(const char *, const String&);
  43. friend int operator<=(const String&, const String&);
  44. friend int operator<=(const String&, const char *);
  45. friend int operator<=(const char *, const String&);
  46.  
  47. friend istream &operator>>(istream&, String&);
  48. friend ostream &operator<<(ostream&, const String&);
  49. public:
  50.  
  51.     enum string_enum { all = INT_MAX };
  52.  
  53.     String();
  54.     String(const String&);
  55.     String(const char *, int count = 0);
  56.     String(char);
  57.  
  58.     ~String();
  59.  
  60.     operator char*() const { return body(); }
  61.     operator char() const { return *body(); }
  62.     String upper() const;
  63.     String lower() const;
  64.  
  65.     String &operator=(const String&);
  66.     String &operator=(const char *);
  67.     String &operator=(char);
  68.     String &operator+=(const String&);
  69.     String &operator+=(const char *);
  70.     String &operator+=(char);
  71.  
  72.     String &insert(int pos, const String&);
  73.     String &insert(int pos, const char *, int count = 0);
  74.     String &insert(int pos, char);
  75.     String &remove(int pos, int count);
  76.     String &truncate(int);
  77.  
  78.     char &operator[](int);
  79.     char operator()(int i) { return *(rp->body+i); }
  80.     String operator()(int start, int len);
  81.  
  82.     int match(const String&) const;
  83.     int match(const char *) const;
  84.     int index(const String&, int pos = 0) const;
  85.     int index(const char *, int = 0) const;
  86.     int index(char, int = 0) const;
  87.  
  88.     int operator!() const { return !rp; }
  89.     int length() const { return rp? rp->length: 0; }
  90. private:
  91.     char *body() const { return rp? rp->body: 0; }
  92.  
  93.     srep *rp;
  94.     static char dummy;
  95. };
  96.  
  97. inline int strlen(const String &s)
  98. {
  99.     return s.length();
  100. }
  101.  
  102. #endif
  103.